package com.qf.vote2203.dbvote.controller;

import com.qf.vote2203.dbvote.service.IVoteService;
import com.qf.vote2203.utils.ResultVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author dong
 * @since 2023-02-27
 */
@RestController
@RequestMapping("/dbvote")
@Slf4j
public class VoteController {


    @Autowired
    IVoteService voteService;

    /**
     * token颁发接口。调用投票接口之前需要访问该接口获取token。
     * - 用户提交提交手机号码，每个手机号码在每分钟内可以获取一个token。
     * - 如果在1分钟内同一个手机号码多次调用该接口，返回相同的token。
     * - 如果超出一分钟，则颁发新的token。
     */
    @GetMapping("/gettoken")
    public ResultVo getToken(String phone) throws Exception {

        log.debug("phone={}",phone);

        String token = voteService.getToken(phone);

        return ResultVo.ok(token);
    }

    /**
     * (2) 投票接口。该接口用于给指定选手投票。
     * - 需要申请到token才能投票。没有token不能投票。
     * - 每个手机号，每分钟内只能投一票。
     * - 投票接口接收参数：用户手机号码、选手ID（候选人名字）、token （如有其他设计可自行扩展）
     * @param phone
     * @param cadidateId
     * @param token
     * @return
     */
    @PostMapping("/dovote")
    public ResultVo dovote(String phone,Integer cadidateId,@RequestHeader("token") String token) throws Exception {

        voteService.doVote(phone,cadidateId,token);

        return ResultVo.ok();
    }


    /**
     * (3) 投票数量统计接口。该接口返回统计的投票信息。
     * - 返回json即可。[{"name":"张靓颖","票数":9999},{"name":"周笔畅","票数":8888}]
     * @return
     */
   @GetMapping("/statistic")
    public ResultVo statisticVote(){

        List<Map<String,Object>> data = voteService.statisticVote();

        return ResultVo.ok(data);
    }

}
